<<<<<<< HEAD
#ifndef _SYS_LOG_H
#define _SYS_LOG_H

#include <stdio.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>

// 修改枚举成员名称避免冲突
typedef enum {
    LOG_LVL_NOTE,    // 普通信息
    LOG_LVL_INFO,    // 一般信息
    LOG_LVL_WARN,    // 警告 (避免与syslog的LOG_WARNING冲突)
    LOG_LVL_ERROR,   // 错误
    LOG_LVL_FATAL,   // 致命错误
    LOG_LVL_COUNT    // 级别总数
} LogLevel;

// 日志输出目标
typedef enum {
    LOG_TARGET_CONSOLE,  // 控制台
    LOG_TARGET_SYSLOG,   // 系统日志
    LOG_TARGET_FILE,     // 文件
    LOG_TARGET_NULL      // 不输出（用于测试）
} LogTarget;

// 日志配置结构体
typedef struct {
    LogLevel level;      // 最低记录级别
    LogTarget target;    // 输出目标
    const char* filename;// 文件路径（当target为FILE时使用）
    int use_color;       // 是否使用颜色（仅控制台有效）
} LogConfig;

// ================== 公共接口 ==================
// 初始化日志系统
void log_init(LogConfig config);

// 设置日志级别
void log_set_level(LogLevel level);

// 核心日志函数
void log_message(LogLevel level, const char* file, int line, const char* fmt, ...);

// 关闭日志系统
void log_close();

// ================== 日志宏 ==================
#define LOG_NOTE(fmt, ...)   log_message(LOG_LVL_NOTE,   __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...)   log_message(LOG_LVL_INFO,   __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_WARN(fmt, ...)   log_message(LOG_LVL_WARN,   __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...)  log_message(LOG_LVL_ERROR,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_FATAL(fmt, ...)  log_message(LOG_LVL_FATAL,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)

=======
#ifndef _SYS_LOG_H
#define _SYS_LOG_H

#include <stdio.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>

// 修改枚举成员名称避免冲突
typedef enum {
    LOG_LVL_NOTE,    // 普通信息
    LOG_LVL_INFO,    // 一般信息
    LOG_LVL_WARN,    // 警告 (避免与syslog的LOG_WARNING冲突)
    LOG_LVL_ERROR,   // 错误
    LOG_LVL_FATAL,   // 致命错误
    LOG_LVL_COUNT    // 级别总数
} LogLevel;

// 日志输出目标
typedef enum {
    LOG_TARGET_CONSOLE,  // 控制台
    LOG_TARGET_SYSLOG,   // 系统日志
    LOG_TARGET_FILE,     // 文件
    LOG_TARGET_NULL      // 不输出（用于测试）
} LogTarget;

// 日志配置结构体
typedef struct {
    LogLevel level;      // 最低记录级别
    LogTarget target;    // 输出目标
    const char* filename;// 文件路径（当target为FILE时使用）
    int use_color;       // 是否使用颜色（仅控制台有效）
} LogConfig;

// ================== 公共接口 ==================
// 初始化日志系统
void log_init(LogConfig config);

// 设置日志级别
void log_set_level(LogLevel level);

// 核心日志函数
void log_message(LogLevel level, const char* file, int line, const char* fmt, ...);

// 关闭日志系统
void log_close();

// ================== 日志宏 ==================
#define LOG_NOTE(fmt, ...)   log_message(LOG_LVL_NOTE,   __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...)   log_message(LOG_LVL_INFO,   __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_WARN(fmt, ...)   log_message(LOG_LVL_WARN,   __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...)  log_message(LOG_LVL_ERROR,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define LOG_FATAL(fmt, ...)  log_message(LOG_LVL_FATAL,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)

>>>>>>> 39e3ba406c849a6599ada4a566e867047f276b22
#endif // LOGGER_H